Introduce API to get the preferred visual
authorMatthias Clasen <mclasen@redhat.com>
Wed, 22 Jan 2014 23:48:45 +0000 (18:48 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 4 Feb 2014 18:15:46 +0000 (13:15 -0500)
Unless GDK_RGBA=0 is set, this will be the RGBA visual.
The new function is called gdk_screen_get_preferred_visual().

https://bugzilla.gnome.org/show_bug.cgi?id=630217

docs/reference/gdk/gdk3-sections.txt
docs/reference/gtk/running.sgml
gdk/gdkscreen.c
gdk/gdkscreen.h
gdk/gdkscreenprivate.h
gtk/gtkwidget.c

index d23183a3dd62ad24e4c5b55d7843d9783a56bd5b..f3a35e5b77f3a803f2a58b854c5ba40d91acd799 100644 (file)
@@ -195,6 +195,7 @@ GdkScreen
 gdk_screen_get_default
 gdk_screen_get_system_visual
 gdk_screen_get_rgba_visual
+gdk_screen_get_preferred_visual
 gdk_screen_is_composited
 gdk_screen_get_root_window
 gdk_screen_get_display
index 8065e194e81f2ad8a79f48bd409ccb2c01b7ac7f..c7d2d9bc9a18aa5da1369a90864a67db69b45c05 100644 (file)
@@ -478,6 +478,15 @@ nevertheless.
   </para>
 </formalpara>
 
+<formalpara>
+  <title><envar>GDK_RGBA</envar></title>
+
+  <para>
+    Since 3.12, this environment variable can be used to prevent
+    using RGBA visuals on the X11 backend by setting GDK_RGBA=0.
+  </para>
+</formalpara>
+
 <formalpara>
   <title><envar>XDG_DATA_HOME</envar>, <envar>XDG_DATA_DIRS</envar></title>
 
index 743b850bd57906266e39d46d4c9846e1f50b8261..113d2a4052991c3f6afd374d667148ab212748ae 100644 (file)
@@ -912,6 +912,36 @@ gdk_screen_get_rgba_visual (GdkScreen *screen)
   return GDK_SCREEN_GET_CLASS (screen)->get_rgba_visual (screen);
 }
 
+/**
+ * gdk_screen_get_preferred_visual:
+ * @screen: a #GdkScreen
+ *
+ * Returns the visual that is preferred when creating windows.
+ *
+ * This will be the visual returned by gdk_screen_get_rgba_visual()
+ * unless that is not available, or unless the environment
+ * variable <envar>GDK_RGBA</envar> is set to 0.
+ *
+ * Return value: (transfer none): the preferred visual to use
+ *     for windows
+ *
+ * Since: 3.12
+ */
+GdkVisual *
+gdk_screen_get_preferred_visual (GdkScreen *screen)
+{
+  GdkVisual *visual;
+
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+
+  visual = gdk_screen_get_rgba_visual (screen);
+
+  if (visual == NULL || g_strcmp0 (g_getenv ("GDK_RGBA"), "0") == 0)
+    visual = gdk_screen_get_system_visual (screen);
+
+  return visual;
+}
+
 /**
  * gdk_screen_is_composited:
  * @screen: a #GdkScreen
index dde5524fa46f4c7254c253b3f0adbd2c8b9fd60c..57d613245bf983e75b16160d1c40998e601f7da5 100644 (file)
@@ -45,6 +45,8 @@ GDK_AVAILABLE_IN_ALL
 GdkVisual *  gdk_screen_get_system_visual     (GdkScreen   *screen);
 GDK_AVAILABLE_IN_ALL
 GdkVisual *  gdk_screen_get_rgba_visual       (GdkScreen   *screen);
+GDK_AVAILABLE_IN_3_12
+GdkVisual *  gdk_screen_get_preferred_visual  (GdkScreen   *screen);
 GDK_AVAILABLE_IN_ALL
 gboolean     gdk_screen_is_composited         (GdkScreen   *screen);
 
index 23cf1bdae25fe2a77b90263d7b5c819cb5db59b3..b73a0926f04ceb07650bd28ccdf2d25bf595fe22 100644 (file)
@@ -66,6 +66,7 @@ struct _GdkScreenClass
   GList *      (* list_visuals)          (GdkScreen *screen);
   GdkVisual *  (* get_system_visual)     (GdkScreen *screen);
   GdkVisual *  (* get_rgba_visual)       (GdkScreen *screen);
+  GdkVisual *  (* get_preferred_visual)  (GdkScreen *screen);
   gboolean     (* is_composited)         (GdkScreen *screen);
   gchar *      (* make_display_name)     (GdkScreen *screen);
   GdkWindow *  (* get_active_window)     (GdkScreen *screen);
index 29157c02f3a8f00f51c6c74689124ceec02fd8c9..6deeb6e84f12ba6bf7e2804715a4a7577f25b74f 100644 (file)
@@ -10863,9 +10863,14 @@ gtk_widget_get_visual (GtkWidget *widget)
           g_warning ("Ignoring visual set on widget `%s' that is not on the correct screen.",
                      gtk_widget_get_name (widget));
         }
-    }
 
-  return gdk_screen_get_system_visual (screen);
+  visual = gdk_screen_get_rgba_visual (screen);
+
+  if (visual == NULL ||
+      g_strcmp0 (g_getenv ("GDK_RGBA"), "0") != 0)
+    visual = gdk_screen_get_system_visual (screen);
+
+  return visual;
 }
 
 /**